/*实现步骤:
1.定义一个接口以及实现类
2.创建代理类实现接口
3.将目标对象注入代理类
在代理类中调用对应的目标类中的目标方法，通过代理模式，我们可以做到屏蔽掉外界对于目标对象的访问，而转为访问经过增强的代理类，获得额外的能力。
静态代理是指在编译期就确定代理关系，需要手动编写代理类的代理模式。代理类和被代理类在编译期就已经确定，通常一个代理类只为一个特定的接
口或类服务。
不够灵活，应用场景很少，日常开发不太会去使用
* */
public class StaticProxy {
    public static void main(String[] args){
        //真实明星类--多态
        Star kun = new RealStar("kun");
        //Agent,注入kun
        Star agent = new StarAgent(kun);

        //代理类调用
        agent.readLetter("I love you");
    }

}
//经纪人代理类
//将目标对象注入类中，在代理类中调用对应目标类中的目标方法
class StarAgent implements Star{
    private Star star;
    //构造方法注入，实现代理
    public StarAgent(Star star){
        this.star = star;
    }
    @Override
    public void readLetter(String letter) {
        System.out.println("Agent收到信");
        System.out.println("Agent检查信");
        star.readLetter(letter);
        System.out.println("Agent记录处理完成");
    }
}
